const express = require('express');
const app = express();
const { join } = require('path');
// 引入数据库连接文件
const conn = require('./public/js/conn');
// 引入加密模块
const crypto = require('crypto');
// 引入解决post请求的模块
const bodyParser = require('body-parser');
// 引入cookie模块
const cookieParser = require('cookie-parser');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());
// 模板引擎配置
app.set('views', join(__dirname, 'views'));
app.set('view engine', 'pug');

// 设置静态资源文件目录（中间件）
app.use(express.static(join(__dirname, 'public')));

// 配置服务器
const config = {
  host: '127.0.0.1',
  port: process.env.PORT || 4000
}

// 解决跨域
app.all('*', (req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  next();
})

// 首页路由配置
app.get('/', (req, res, next) => {
  conn.query('select imgUrl from banner limit 3', (err, rs) => {
    if (err) throw err;
    // res.send(rs)
    if (rs.length > 0) {
      res.render('home', {
        title: '海大商城首页',
        imgs: rs
      });
    } else {
      res.render('home', {
        title: '海大商城首页',
        imgs: [
          { imgUrl: '/img/banner1.png' },
          { imgUrl: '/img/banner2.png' },
          { imgUrl: '/img/banner3.png' }
        ]
      });
    }
  })
})

// 重定向路由设置
app.all('/home', (req, res) => {
  res.redirect('/');
})

// 产品分类页面路由
app.get('/classic', (req, res) => {
  conn.query('select imgUrl from banner', (err, rs) => {
    if (err) throw err;
    // res.send(rs)
    res.render('classic', {
      title: '产品分类',
      imgs: rs
    })
  })
})

// 购物车页面路由
app.get('/cart', (req, res) => {
  let cookie = req.cookies.username;
  if(!cookie){
    res.redirect('/login');
  } else {
    res.render('cart', {
      title: '购物车'
    })
  }
})

// 个人页面路由
app.get('/mine', (req, res) => {
  let cookie = req.cookies.username;
  if(!cookie){
    res.redirect('/login');
  } else {
    res.render('mine', {
      title: '我的'
    })
  }
})

// 产品详情页面路由
app.get('/details/:id', (req, res) => {
  let id = req.params.id;
  switch (id) {
    case 'hot': res.render('details', { title: '热卖商品', content: '热卖商品' }); break;
    case 'boom': res.render('details', { title: '爆款商品', content: '爆款商品' }); break;
    case 'new': res.render('details', { title: '最新商品', content: '最新商品' }); break;
    case 'hobby': res.render('details', { title: '猜您喜欢', content: '猜您喜欢' });
  }
})

// 注册模板渲染
app.get('/register', (req, res) => {
  res.render('register', {
    title: '用户注册'
  })
})

// 注册用户接口
app.post('/register', (req, res) => {
  let data = req.body;
  if (!data) {
    res.json({
      msg: '没有提交数据！',
      status: 0
    })
    return false;
  }
  // 用户名非空校验
  if (!data.username) {
    res.json({
      msg: '没有用户名',
      status: 0
    })
    return false;
  }
  // 用户名非空校验
  if (!data.password) {
    res.json({
      msg: '没有密码',
      status: 0
    })
    return false;
  }
  // 加密密码
  data.password = crypto.createHmac('sha256', data.password)
    .update('secret password')
    .digest('hex')
  // console.log(crypto.createHmac('sha256','1111').digest('hex'));

  conn.query(`select * from user where username='${data.username}'`, (err, rs) => {
    if (err) throw err;
    // 注册前先校验该用户是否已经注册过
    if (rs.length > 0) {
      res.json({
        msg: '该用户已经存在！',
        status: 0
      })
    } else {
      conn.query(`insert into user(username,password) values('${data.username}','${data.password}')`, (err, rs) => {
        if (err) throw err;
        res.json({
          msg: '注册成功',
          status: 1
        })
      })
    }
  })
})

// 登录模板渲染
app.get('/login', (req, res) => {
  res.render('login', {
    title: '登录'
  })
})

// 登录接口
app.post('/login', (req, res) => {
  let data = req.body;
  if (!data) {
    res.json({
      msg: '没有提交信息',
      status: 0
    })
  }
  if (!data.username) {
    res.json({
      msg: '用户名为空',
      status: 0
    })
    return false;
  }
  if (!data.password) {
    res.json({
      msg: '密码为空',
      status: 0
    })
    return false;
  }
  data.password = crypto.createHmac('sha256', data.password)
    .update('secret password')
    .digest('hex');
  conn.query(`select * from user where username = '${data.username}' and password = '${data.password}'`, (err, rs) => {
    if (err) throw err;
    if (rs.length > 0) {
      res.cookie('username',data.username,{maxAge:1000*3600*24*7});
      res.json({
        msg: '登录成功',
        status: 1
      })
    } else {
      res.json({
        msg: '登录失败',
        status: 0
      })
    }
  })
})

// 数据库连接测试
/* app.get('/db', (req, res) => {
  conn.query('select * from user', (err, data) => {
    if (err) throw err;
    res.json(data);
  })
}) */

// 服务器监听
app.listen(config.port, config.host, () => {
  console.log(`海大商城服务器运行在http://${config.host}:${config.port}`);
})
